function [PH,ax]=Plot_IRF(IRFMat,InfoArgs)
arguments
    IRFMat double;
    InfoArgs.T0 = 0;
    InfoArgs.LineProperty = [];
    InfoArgs.AxisProperty = GR_Axis('Box','off');
    InfoArgs.XTick = [];
    InfoArgs.YTick = [];
    InfoArgs.Symmetric = 1;
    InfoArgs.ax = gca();
end
ax = InfoArgs.ax;
N = size(IRFMat,1); T = size(IRFMat,2);

XData = InfoArgs.T0+(0:1:T-1); YData = IRFMat;
if isempty(InfoArgs.LineProperty)
    LP = cell(N,1);
    for ii=1:N
        LP{ii} = GR_Line('Color',MyColor('Blue',1-ii/(N+1)));
    end
else
    LP = InfoArgs.LineProperty;
end

if isempty(InfoArgs.XTick)
    XTickValue = GR_TickValue('Unit',4).Setup(XData);
else
    XTickValue = InfoArgs.XTick;
end
if isempty(InfoArgs.YTick)
    YTickValue = GR_TickValue('Symmetric',InfoArgs.Symmetric).Setup(YData); 
else 
    YTickValue = InfoArgs.YTick;
end
if max(abs(YData))<1e-6
    YTickValue = GR_TickValue('Symmetric',InfoArgs.Symmetric).Setup([-0.1,0.1]);
end

PH = zeros(N,1);
for ii=1:N
    PH(ii) = LP{ii}.Plot(ax,XData,YData(ii,:));
    hold on;
end
if InfoArgs.Symmetric
    GR_Line('Color','Black','Width',0.3).Plot(ax,XData,zeros(size(XData)));
end

ax.YTick = YTickValue; ax.YLim = [min(YTickValue),max(YTickValue)];
ax.XTick = XTickValue; ax.XLim = [min(XTickValue),max(XTickValue)];

InfoArgs.AxisProperty.Setup(ax);
